home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 2003 August / MW 8 2003 CD1.iso / Inside Macworld / Product News / gimp-1.2.4.sit / gimp-1.2.4 / plug-ins / perl / examples / stampify < prev    next >
Encoding:
Text File  |  2000-05-21  |  2.3 KB  |  72 lines

  1. #!/usr/app/bin/perl
  2.  
  3. eval 'exec /usr/app/bin/perl  -S $0 ${1+"$@"}'
  4.     if 0; # not running under some shell
  5.  
  6. use Gimp qw(:auto __ N_);
  7. use Gimp::Fu;
  8.  
  9. #Gimp::set_trace(TRACE_ALL);
  10.  
  11. register    "stampify",
  12.         "Makes an image look like a postage stamp.",
  13.         "This plug-in works from the active layer. Depending on the size of the image, perforations may look strange. Test alternatives!",
  14.         "Claes G Lindblad <claesg\@algonet.se>",
  15.         "Claes G Lindblad <claesg\@algonet.se>",
  16.         "990328",
  17.         N_"<Image>/Filters/Render/Stampify...",
  18.         "*",
  19.         [
  20.     [PF_COLOR, "paper", "Paper colour", [242, 242, 242]],
  21.     [PF_COLOR, "hole", "Hole colour", [0, 0, 0]],
  22.     [PF_INT32, "diameter", "Diameter of perforation", 10],
  23.     [PF_INT32, "gap", "Gap between perforations", 5],
  24.     [PF_INT32, "marg", "Marginal between art and perforations", 7]
  25.         ],
  26.     sub {
  27.         my ($img, $drawable, $paper, $hole, $diameter, $gap, $marg) = @_;
  28.         $nw = int(gimp_image_width($img) + 2 * $marg + $diameter);
  29.         $nh = int(gimp_image_height($img) + 2 * $marg + $diameter);
  30.         my $img2 = gimp_image_new($nw, $nh, RGB);
  31.         my $layer1 = gimp_layer_new($img2, $nw, $nh, RGBA_IMAGE, "Layer 1", 100, NORMAL_MODE);
  32.         gimp_image_add_layer($img2, $layer1, 0);
  33.         gimp_image_set_active_layer($img2, $layer1);
  34.         gimp_palette_set_background($paper);
  35.         gimp_drawable_fill($layer1, 1);
  36. # create horisontal holes
  37.         gimp_selection_none($img2);
  38.         my $nholes = int (($nw + $gap) / ($diameter + $gap) + 0.5);
  39.         $pos = 0;
  40.         for ($i = 0; $i<$nholes; $i++) {
  41.             gimp_ellipse_select($img2,
  42.                 $pos, 0,
  43.                 $diameter, $diameter,
  44.                 ADD, 1, 0, 0);
  45.             $pos = $pos + $diameter + $gap;
  46.         }
  47. # create vertical holes
  48.         my $nholes = int (($nh + $gap) / ($diameter + $gap) + 0.5);
  49.         $pos = 0;
  50.         for ($i = 0; $i<$nholes; $i++) {
  51.             gimp_ellipse_select($img2,
  52.                 0, $pos,
  53.                 $diameter, $diameter,
  54.                 ADD, 1, 0, 0);
  55.             $pos = $pos + $diameter + $gap;
  56.         }
  57.         gimp_palette_set_background($hole);
  58.         gimp_edit_fill($layer1, BG_IMAGE_FILL);
  59.         gimp_selection_none($img2);
  60. # here comes the clever part! :-)
  61. # offset horis and vert holes by half the diameter
  62.         gimp_channel_ops_offset($layer1, 1, 0, -($diameter / 2), -($diameter / 2));
  63. # insert $img into a new layer in $img2
  64. #        gimp_selection_all($img);
  65.         gimp_edit_copy($drawable);
  66.         my $float = gimp_edit_paste($layer1, 0);
  67.         gimp_floating_sel_anchor($float);
  68. # and return command to The Gimp.
  69.         return $img2;
  70.     };
  71. exit main;
  72.